package ufc.si.fbd.logica.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import ufc.si.fbd.logica.ConnectionFactory;

import ufc.si.fbd.logica.entidades.Atividade;

public class AtividadeDAO {

    public void salvar(Atividade atividade) throws SQLException {
        Connection conexao = ConnectionFactory.getConnection();
        String sql;
        PreparedStatement ps = null;
        if (atividade.getId() == 0) {
            sql = "INSERT INTO atividades (descricao, ministrante, limite_participantes, valor, evento) VALUES (?, ?, ?, ?, ?)";
            ps = conexao.prepareStatement(sql);
            ps.setString(1, atividade.getDescricao());
            ps.setString(2, atividade.getMinistrante());
            ps.setInt(3, atividade.getLimiteParticipantes());
            ps.setDouble(4, atividade.getValor());
            ps.setInt(5, atividade.getIdEvento());
            ps.executeUpdate();
        } else {
            sql = "UPDATE atividades SET descricao = ?, ministrante = ?, limite_participantes = ?, valor = ?, evento = ? WHERE id = ?";
            ps = conexao.prepareStatement(sql);
            ps.setString(1, atividade.getDescricao());
            ps.setString(2, atividade.getMinistrante());
            ps.setInt(3, atividade.getLimiteParticipantes());
            ps.setDouble(4, atividade.getValor());
            ps.setInt(5, atividade.getIdEvento());
            ps.setInt(6, atividade.getId());
            ps.executeUpdate();
        }
        conexao.close();
    }

    public List<Atividade> listar() throws SQLException {
        Connection conexao = ConnectionFactory.getConnection();
        String sql = "SELECT * FROM atividades";
        PreparedStatement ps = conexao.prepareStatement(sql);
        List<Atividade> atividades = new ArrayList<Atividade>();
        ResultSet result = ps.executeQuery();
        while (result.next()) {
            int id = result.getInt("id");
            String descricao = result.getString("descricao");
            String ministrante = result.getString("ministrante");
            int limiteParticipantes = result.getInt("limite_participantes");
            double valor = result.getDouble("valor");
            int evento = result.getInt("evento");
            Atividade atividade = new Atividade(id, descricao, ministrante, limiteParticipantes, valor, evento);
            atividades.add(atividade);
        }
        conexao.close();
        return atividades;
    }

    public Atividade find(int id) throws SQLException {
        Connection conexao = ConnectionFactory.getConnection();
        String sql = "SELECT * FROM atividades WHERE id = ?";
        PreparedStatement ps = conexao.prepareStatement(sql);
        ps.setInt(1, id);
        Atividade atividade = new Atividade();

        ResultSet result = ps.executeQuery();

        while (result.next()) {
            atividade.setId(result.getInt("id"));
            atividade.setDescricao(result.getString("descricao"));
            atividade.setMinistrante(result.getString("ministrante"));
            atividade.setLimiteParticipantes(result.getInt("limite_participantes"));
            atividade.setValor(result.getDouble("valor"));
            atividade.setIdEvento(result.getInt("evento"));
        }
        conexao.close();
        return atividade;
    }

    public void remover(int id) throws SQLException {
        Connection conexao = ConnectionFactory.getConnection();
        String sql = "DELETE FROM atividades WHERE id = ?";
        PreparedStatement ps = conexao.prepareStatement(sql);
        ps.setInt(1, id);
        ps.executeUpdate();
        conexao.close();
    }
}
